/*
 * 代号：凤凰
 * http://www.jphenix.org
 * 2014-06-13
 * V4.0
 */
package com.jphenix.standard.servlet;

import com.jphenix.standard.docs.ClassInfo;

/**
 * 服务类接口
 * 
 * 2022-09-04 隔离了ServletApi，兼容新老Tomcat
 * 
 * @author 刘虻
 * 2010-6-2 下午01:50:26
 */
@ClassInfo({"2022-09-04 21:58","服务类接口"})
public interface IServletBean {

	/**
	 * 获取动作主键  （已经改用线程号替代）
	 * 
	 * 随机字符串，生命周期：线程执行开始，到线程执行结束
	 * 通常用户触发一个动作，到动作结束
	 * 
	 * 刘虻
	 * 2010-6-2 下午01:53:56
	 * @return 动作主键
	 */
	//String getActionSessionID();
	
	/**
	 * 设置动作会话主键
	 * 
	 * 注意：不要轻易设置该值。在没有设置该值的情况下，
	 * getActionSessionID()方法获取到的是当前线程从头到尾统一的线程会话主键
	 * 在操作数据库时，通过该主键始终获取同一个数据库连接对象实例，这样在当前
	 * 线程操作数据库的某一个环节发生异常，针对该连接对象可以做回滚，使当前线程
	 * 操作过的数据都不生效，避免一部分生效一部分失效的问题。
	 * 
	 * 但是有的环节必须使用另外的数据库连接，比如数据字典服务。当前线程在查询数据
	 * 之后，对记录集做循环加载数据到内存的处理，在这个处理过程中，会调用数据字典
	 * 服务获取数据字典对照表。如果这个时候数据字典服务要查询数据库，通过相同的线程
	 * 会话主键获取数据库连接，这个连接目前正在被使用（因为正在处理记录集，并没有
	 * 释放）就会被锁死，导致无法完成查询。
	 * 
	 * 所以目前数据字典服务采用独立的线程会话主键，来避免使用同一个数据库连接
	 * 
	 * 
	 * 注意：该方法被取消了，因为不能通过程序避免在数据字典服务类中对数据库做更新
	 * 操作，如果做了更新操作，该线程后期操作数据库发生异常导致回滚，数据字典服务
	 * 更新的数据就不会回滚了，这是不允许的
	 * 
	 * 刘虻
	 * 2012-12-6 下午5:37:04
	 * @param actionSessionID 动作会话主键
	 */
	//void setActionSessionID(String actionSessionID);
}
